package com.ygqh.baby.dao;

import java.io.InputStream;
import java.util.HashMap;
import java.util.List;

import org.springframework.data.mongodb.core.query.Criteria;

import com.mongodb.gridfs.GridFSDBFile;
import com.mongodb.gridfs.GridFSFile;

/**
 * 
 * 操作mongodb存储文件接口
 * 
 */
public interface GridFSDao {

	/**
	 * 存储文件
	 * 
	 * @param content
	 *            文件内容
	 * @param filename
	 *            文件名
	 * @param contentType
	 *            内容类型
	 * @return
	 */
	GridFSFile store(InputStream content, String filename, String contentType);

	/**
	 * 存储唯一文件
	 * 
	 * @param content
	 *            文件内容
	 * @param filename
	 *            文件名
	 * @param contentType
	 *            内容类型
	 * @return
	 */
	GridFSFile storeUnique(InputStream content, String filename, String contentType);

	/**
	 * 存储唯一文件
	 * 
	 * @param content
	 *            文件内容
	 * @param filename
	 *            文件名
	 * @param contentType
	 *            内容类型
	 * @param map
	 *            自定义字段
	 * @return
	 */
	GridFSFile storeUnique(InputStream content, String filename, String contentType, HashMap<String, String> map);

	/**
	 * 查询单个文件
	 * 
	 * @param filename
	 *            文件名
	 * @return
	 */
	GridFSDBFile findOne(String filename);

	/**
	 * 查询单个文件
	 * 
	 * @param filename
	 *            文件名
	 * @param contentType
	 *            文件类型
	 * @return
	 */
	GridFSDBFile findOne(String filename, String contentType);

	/**
	 * 根据查询条件查询一条数据
	 * 
	 * @param criteria
	 *            查询条件
	 * @return
	 * @throws Exception
	 */
	GridFSDBFile findOne(Criteria criteria) throws Exception;
	
	/**
	 * 根据查询条件查询一条数据
	 * 
	 * @param criteria
	 *            查询条件
	 * @return
	 * @throws Exception
	 */
	GridFSDBFile findById(String id) throws Exception;

	/**
	 * 查询所有文件
	 * 
	 * @param filename
	 *            文件名
	 * @return
	 */
	List<GridFSDBFile> find(String filename);

	/**
	 * 查询所有文件
	 * 
	 * @param filename
	 *            文件名
	 * @param contentType
	 *            文件类型
	 * @return
	 */
	List<GridFSDBFile> find(String filename, String contentType);

	/**
	 * 根据条件查找文件
	 * 
	 * @param criteria
	 *            条件
	 * @return
	 */
	List<GridFSDBFile> find(Criteria criteria) throws Exception;

	/**
	 * 删除文件
	 * 
	 * @param key
	 *            id
	 */
	void deleteById(String key);

	/**
	 * 删除文件
	 * 
	 * @param filename
	 *            文件名
	 * @param contentType
	 *            文件类型
	 */
	void delete(String filename, String contentType);
}
